/*==============================================================================
  项目名称: Demo数据集详细分析报告（Word格式输出）
  创建日期: 2025-10-26
  描述: 使用dataset/demo.xlsx数据进行全面分析
        包含数据探索、统计分析、可视化和Word报告生成
==============================================================================*/

* 清空内存和关闭所有日志
clear all
set more off
capture log close

* 开启日志记录
log using "demo_analysis_log.smcl", replace

/*------------------------------------------------------------------------------
  1. 数据导入和初步探索
------------------------------------------------------------------------------*/
display "=========================================="
display "开始分析demo.xlsx数据集"
display "=========================================="
display ""

* 导入Excel数据
display "1. 导入数据..."
import excel "dataset/demo.xlsx", firstrow clear

* 保存为Stata格式
save "dataset/demo.dta", replace

* 查看数据基本信息
display ""
display "2. 数据基本信息："
describe

* 显示变量数量和观测数
quietly describe
local nvars = r(k)
local nobs = r(N)

display ""
display "   变量数量: `nvars'"
display "   观测数量: `nobs'"

* 查看前10行数据
display ""
display "3. 前10行数据："
list in 1/10, separator(5)

* 查看数据类型
display ""
display "4. 变量详细信息："
codebook, compact

/*------------------------------------------------------------------------------
  2. 创建输出目录
------------------------------------------------------------------------------*/
display ""
display "5. 创建输出目录..."
capture mkdir "dataset/demo_output"
capture mkdir "dataset/demo_output/graphs"
capture mkdir "dataset/demo_output/tables"

/*------------------------------------------------------------------------------
  3. 数据清理和准备
------------------------------------------------------------------------------*/
display ""
display "6. 数据清理..."

* 检查缺失值
misstable summarize
misstable patterns

* 识别数值型变量和字符型变量
quietly ds, has(type numeric)
local numvars `r(varlist)'
display "   数值型变量: `numvars'"

quietly ds, has(type string)
local strvars `r(varlist)'
display "   字符型变量: `strvars'"

/*------------------------------------------------------------------------------
  4. 描述性统计分析
------------------------------------------------------------------------------*/
display ""
display "7. 描述性统计分析..."

* 对所有数值型变量进行描述性统计
if "`numvars'" != "" {
    summarize `numvars', detail
    
    * 保存描述性统计到文件
    preserve
    quietly {
        tempname memhold
        postfile `memhold' str30 variable obs mean sd min p25 p50 p75 max ///
            using "dataset/demo_output/tables/descriptive_stats.dta", replace
        
        foreach var of local numvars {
            capture summarize `var', detail
            if _rc == 0 {
                post `memhold' ("`var'") (r(N)) (r(mean)) (r(sd)) (r(min)) ///
                    (r(p25)) (r(p50)) (r(p75)) (r(max))
            }
        }
        postclose `memhold'
    }
    
    use "dataset/demo_output/tables/descriptive_stats.dta", clear
    export delimited using "dataset/demo_output/tables/descriptive_stats.csv", replace
    restore
}

/*------------------------------------------------------------------------------
  5. 生成可视化图表
------------------------------------------------------------------------------*/
display ""
display "8. 生成可视化图表..."

* 获取前几个数值型变量用于可视化
local graph_count = 0

* 为每个数值型变量生成直方图
foreach var of local numvars {
    local graph_count = `graph_count' + 1
    if `graph_count' <= 6 {
        display "   生成图表 `graph_count': `var' 的分布图"
        
        * 直方图
        quietly summarize `var'
        if r(N) > 0 & r(sd) > 0 {
            histogram `var', frequency normal ///
                title("`var' 分布图") ///
                xtitle("`var'") ytitle("频数") ///
                note("数据来源: demo.xlsx")
            graph export "dataset/demo_output/graphs/hist_`var'.png", ///
                replace width(2000) height(1500)
        }
    }
}

* 如果有多个数值型变量，生成散点图矩阵
local num_numvars : word count `numvars'
if `num_numvars' >= 2 {
    display "   生成散点图矩阵"
    
    * 选择前4个变量
    local scatter_vars ""
    local count = 0
    foreach var of local numvars {
        local count = `count' + 1
        if `count' <= 4 {
            local scatter_vars "`scatter_vars' `var'"
        }
    }
    
    if "`scatter_vars'" != "" {
        graph matrix `scatter_vars', half ///
            title("变量关系散点图矩阵")
        graph export "dataset/demo_output/graphs/scatter_matrix.png", ///
            replace width(2000) height(1500)
    }
}

* 箱线图（前3个数值型变量）
local count = 0
foreach var of local numvars {
    local count = `count' + 1
    if `count' <= 3 {
        display "   生成箱线图: `var'"
        graph box `var', ///
            title("`var' 箱线图") ///
            ytitle("`var'") ///
            note("数据来源: demo.xlsx")
        graph export "dataset/demo_output/graphs/box_`var'.png", ///
            replace width(2000) height(1500)
    }
}

/*------------------------------------------------------------------------------
  6. 相关性分析
------------------------------------------------------------------------------*/
display ""
display "9. 相关性分析..."

if `num_numvars' >= 2 {
    * 选择前5个数值型变量进行相关性分析
    local corr_vars ""
    local count = 0
    foreach var of local numvars {
        local count = `count' + 1
        if `count' <= 5 {
            local corr_vars "`corr_vars' `var'"
        }
    }
    
    if "`corr_vars'" != "" {
        correlate `corr_vars'
        matrix C = r(C)
        
        * 保存相关系数矩阵
        preserve
        clear
        svmat C, names(col)
        export delimited using "dataset/demo_output/tables/correlation_matrix.csv", replace
        restore
    }
}

/*------------------------------------------------------------------------------
  7. 回归分析（如果适用）
------------------------------------------------------------------------------*/
display ""
display "10. 回归分析..."

* 如果有至少2个数值型变量，进行简单回归
if `num_numvars' >= 2 {
    local depvar : word 1 of `numvars'
    local indepvar : word 2 of `numvars'
    
    display "   因变量: `depvar'"
    display "   自变量: `indepvar'"
    
    quietly count if !missing(`depvar') & !missing(`indepvar')
    if r(N) > 10 {
        regress `depvar' `indepvar'
        estimates store model1
        
        * 如果有第3个变量，进行多元回归
        if `num_numvars' >= 3 {
            local indepvar2 : word 3 of `numvars'
            regress `depvar' `indepvar' `indepvar2'
            estimates store model2
        }
    }
}

/*------------------------------------------------------------------------------
  8. 创建Word报告
------------------------------------------------------------------------------*/
display ""
display "11. 创建Word报告..."

putdocx begin, header(main_header) footer(main_footer)

* 设置页眉
putdocx paragraph, toheader(main_header) font("微软雅黑", 10)
putdocx text ("Demo数据集分析报告 | Demo Dataset Analysis Report")

* 设置页脚（页码）
putdocx paragraph, tofooter(main_footer) halign(center) font("微软雅黑", 9)
putdocx text ("第 ")
putdocx pagenumber
putdocx text (" 页")

* 封面
putdocx paragraph, style(Title) halign(center)
putdocx text ("Demo数据集统计分析报告"), font("微软雅黑", 28, black) bold

putdocx paragraph, halign(center) spacing(after, 10)
putdocx text ("Demo Dataset Statistical Analysis Report"), font("微软雅黑", 16, "gray") italic

putdocx paragraph, halign(center) spacing(after, 20)
putdocx text ("生成日期: "), font("微软雅黑", 11)
putdocx text ("`c(current_date)'"), font("微软雅黑", 11) bold

putdocx paragraph, halign(center)
putdocx text ("数据来源: dataset/demo.xlsx"), font("微软雅黑", 11)

putdocx paragraph, halign(center) spacing(after, 30)
putdocx text ("样本量: `nobs' 观测, `nvars' 变量"), font("微软雅黑", 11)

putdocx pagebreak

* 第一章：数据概览
putdocx paragraph, style(Heading1)
putdocx text ("一、数据概览"), font("微软雅黑", 18) bold

putdocx textblock begin
本报告基于demo.xlsx数据集进行全面的统计分析。
数据集包含 `nobs' 个观测和 `nvars' 个变量。
我们将从描述性统计、数据可视化、相关性分析等多个角度进行深入分析。
putdocx textblock end

* 数据基本信息表
putdocx paragraph, style(Heading2) spacing(before, 10)
putdocx text ("1.1 数据集基本信息"), font("微软雅黑", 14) bold

putdocx table info = (4, 2), border(all, single, black) layout(autofitcontents)
putdocx table info(1,1) = ("项目"), bold font("微软雅黑", 11)
putdocx table info(1,2) = ("数值"), bold font("微软雅黑", 11)
putdocx table info(1,.), shading("lightblue")

putdocx table info(2,1) = ("总观测数"), font("微软雅黑", 10)
putdocx table info(2,2) = ("`nobs'"), font("微软雅黑", 10)

putdocx table info(3,1) = ("变量数量"), font("微软雅黑", 10)
putdocx table info(3,2) = ("`nvars'"), font("微软雅黑", 10)

local num_numvars : word count `numvars'
putdocx table info(4,1) = ("数值型变量数"), font("微软雅黑", 10)
putdocx table info(4,2) = ("`num_numvars'"), font("微软雅黑", 10)

* 变量列表
putdocx paragraph, style(Heading2) spacing(before, 15)
putdocx text ("1.2 变量列表"), font("微软雅黑", 14) bold

putdocx textblock begin
数值型变量: `numvars'
字符型变量: `strvars'
putdocx textblock end

putdocx pagebreak

* 第二章：描述性统计
putdocx paragraph, style(Heading1)
putdocx text ("二、描述性统计分析"), font("微软雅黑", 18) bold

if "`numvars'" != "" {
    putdocx paragraph, style(Heading2) spacing(before, 10)
    putdocx text ("2.1 数值型变量描述性统计"), font("微软雅黑", 14) bold
    
    putdocx textblock begin
下表展示了所有数值型变量的描述性统计信息，包括观测数、均值、标准差、
最小值、四分位数和最大值。
    putdocx textblock end
    
    * 导入描述性统计表
    preserve
    use "dataset/demo_output/tables/descriptive_stats.dta", clear
    
    putdocx table desc = data(*), varnames border(all, single, black) layout(autofitcontents)
    putdocx table desc(1,.), shading("lightblue") bold font("微软雅黑", 11)
    putdocx table desc(2/.,1), font("微软雅黑", 10)
    putdocx table desc(2/.,2/.), nformat(%9.2f) font("微软雅黑", 10)
    
    putdocx table desc(1,1) = ("变量"), font("微软雅黑", 11) bold
    putdocx table desc(1,2) = ("观测数"), font("微软雅黑", 11) bold
    putdocx table desc(1,3) = ("均值"), font("微软雅黑", 11) bold
    putdocx table desc(1,4) = ("标准差"), font("微软雅黑", 11) bold
    putdocx table desc(1,5) = ("最小值"), font("微软雅黑", 11) bold
    putdocx table desc(1,6) = ("25%分位数"), font("微软雅黑", 11) bold
    putdocx table desc(1,7) = ("中位数"), font("微软雅黑", 11) bold
    putdocx table desc(1,8) = ("75%分位数"), font("微软雅黑", 11) bold
    putdocx table desc(1,9) = ("最大值"), font("微软雅黑", 11) bold
    
    restore
}

putdocx pagebreak

* 第三章：数据可视化
putdocx paragraph, style(Heading1)
putdocx text ("三、数据可视化分析"), font("微软雅黑", 18) bold

putdocx textblock begin
本章通过多种图表展示数据的分布特征和变量之间的关系。
putdocx textblock end

* 添加生成的图表
local count = 0
foreach var of local numvars {
    local count = `count' + 1
    if `count' <= 6 {
        putdocx paragraph, style(Heading2) spacing(before, 15)
        putdocx text ("3.`count' `var' 分布分析"), font("微软雅黑", 14) bold
        
        capture confirm file "dataset/demo_output/graphs/hist_`var'.png"
        if _rc == 0 {
            putdocx paragraph, halign(center)
            putdocx image "dataset/demo_output/graphs/hist_`var'.png", width(5.5, in)
        }
        
        if `count' < 6 {
            putdocx pagebreak
        }
    }
}

* 添加散点图矩阵
capture confirm file "dataset/demo_output/graphs/scatter_matrix.png"
if _rc == 0 {
    putdocx pagebreak
    putdocx paragraph, style(Heading2)
    putdocx text ("3.7 变量关系散点图矩阵"), font("微软雅黑", 14) bold
    
    putdocx textblock begin
散点图矩阵展示了主要变量之间的两两关系，
有助于识别变量间的相关性和潜在的非线性关系。
    putdocx textblock end
    
    putdocx paragraph, halign(center)
    putdocx image "dataset/demo_output/graphs/scatter_matrix.png", width(5.5, in)
}

putdocx pagebreak

* 第四章：相关性分析
if `num_numvars' >= 2 {
    putdocx paragraph, style(Heading1)
    putdocx text ("四、相关性分析"), font("微软雅黑", 18) bold
    
    putdocx textblock begin
相关性分析揭示了变量之间的线性关系强度。
相关系数的绝对值越接近1，表示两个变量之间的线性关系越强。
    putdocx textblock end
    
    * 这里可以添加相关系数矩阵表格
    putdocx paragraph, spacing(before, 10)
    putdocx text ("相关系数矩阵已保存至: dataset/demo_output/tables/correlation_matrix.csv"), ///
        font("微软雅黑", 10) italic
}

putdocx pagebreak

* 第五章：回归分析
if `num_numvars' >= 2 {
    putdocx paragraph, style(Heading1)
    putdocx text ("五、回归分析"), font("微软雅黑", 18) bold
    
    capture estimates restore model1
    if _rc == 0 {
        putdocx paragraph, style(Heading2) spacing(before, 10)
        putdocx text ("5.1 简单线性回归"), font("微软雅黑", 14) bold
        
        putdocx table reg1 = etable
        putdocx table reg1(1,.), shading("lavender") bold font("微软雅黑", 11)
        putdocx table reg1(2/.,1), font("微软雅黑", 10)
        putdocx table reg1(2/.,2/.), nformat(%9.3f) font("微软雅黑", 10)
    }
    
    capture estimates restore model2
    if _rc == 0 {
        putdocx paragraph, style(Heading2) spacing(before, 15)
        putdocx text ("5.2 多元线性回归"), font("微软雅黑", 14) bold
        
        putdocx table reg2 = etable
        putdocx table reg2(1,.), shading("lavender") bold font("微软雅黑", 11)
        putdocx table reg2(2/.,1), font("微软雅黑", 10)
        putdocx table reg2(2/.,2/.), nformat(%9.3f) font("微软雅黑", 10)
    }
}

putdocx pagebreak

* 第六章：结论
putdocx paragraph, style(Heading1)
putdocx text ("六、分析结论"), font("微软雅黑", 18) bold

putdocx textblock begin
本报告对demo.xlsx数据集进行了全面的统计分析，包括：

1. 数据概览：数据集包含 `nobs' 个观测和 `nvars' 个变量

2. 描述性统计：详细展示了各变量的分布特征

3. 数据可视化：通过多种图表直观展示数据特征

4. 相关性分析：揭示了变量之间的关系

5. 回归分析：建立了预测模型

所有分析结果和图表已保存在 dataset/demo_output/ 目录中。
putdocx textblock end

* 保存Word文档
putdocx save "dataset/demo_output/Demo数据分析报告.docx", replace

display ""
display "=========================================="
display "分析完成！"
display "=========================================="
display ""
display "输出文件："
display "  Word报告: dataset/demo_output/Demo数据分析报告.docx"
display "  图表目录: dataset/demo_output/graphs/"
display "  表格目录: dataset/demo_output/tables/"
display ""
display "=========================================="

log close

